/**
    @file camera_factory.hpp
    @brief Camera factory
*/
#ifndef PM3_CAMERA_FACTORY_HPP
#define PM3_CAMERA_FACTORY_HPP

#include "interface.hpp"

namespace pm3 {

    /**
        @class CAMERA_FACTORY
        @brief A factory object for managing cameras
    */
    class CAMERA_FACTORY: public Ogre::Singleton<CAMERA_FACTORY> {
    public:
            CAMERA_FACTORY();

            /**
                @brief Creates a camera with default settings
                @param[in] s_name Reference to the name of the camera
                @return Pointer to the camera
            */
            Ogre::PCZCamera *create_camera( const std::string &s_name );

            /**
                @brief Destroys a camera
                @param[in] s_name Reference to the name of the camera to be destroyed
            */
            void destroy_camera( const std::string &s_name );

            /**
                @brief Destroys a camera
                @param[in] p_cam Pointer to the camera to be destroyed
            */
            void destroy_camera( Ogre::PCZCamera *p_cam );
    };

    //! Camera factory global
    extern CAMERA_FACTORY g_camera_factory;
}

#endif

